home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
524
/
524.xpi
/
chrome
/
mid.jar
/
content
/
mid.js
< prev
next >
Wrap
Text File
|
2010-01-18
|
76KB
|
2,230 lines
///////////////////////////////////////////////
// mid.js //
///////////////////////////////////////////////
//
// More than 500 bugs in less than 150 Kilobyte!
// ---------------------------------------------
// Acknowledgement:
//
// This code contains parts of other extensions such as iconifyTabs, duplicateTab
// Flowing tabs, miniT, and so one. Many thanks for their authors.
// ---------------------
// All the bugs are mine.
//////////////////////////////////////////////
const Cc = Components.classes;
const Ci = Components.interfaces;
midMyPrefB = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
midMyPrefS = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
// findService = Cc["@mozilla.org/find/find_service;1"].getService(Ci.nsIFindService);
var mid_mud = {
dictionary : "default",
olddictionary : "",
fromDialog : false,
forwardCounter : 0,
backCounter : -1,
saveInHistory : true,
midRowCounter : -1,
midFullScreen : false,
midFromRestore : false,
homepage : "about:blank",
midBrowserStartLocation : "http://www.google.com",
midNS : "http://mid.mozdev.org/dictionaries",
MAXREOPENFILES : 5,
FIRSTDYNAMICMENUITEM : 2,
Start: function () {
domHelper = new domHelperObject();
loadFFsearchEngines();
this.tabManager.Init();
this.managePreferences();
this.setBrowserURL();
this.fileManager.restoreDefaultSet();
addEventListener("focus", this.focusManager.checkFocusedElement, true);
addEventListener("mousedown", this.focusManager.checkClickedElement, true);
addEventListener("keypress", this.focusManager.checkKeypressElement, false);
},
unload : function () {
this.saveDSet();
removeEventListener("focus", this.checkFocusedElement, true);
removeEventListener("mousedown", this.checkClickedElement, true);
removeEventListener("keypress", this.checkKeypressElement, false);
},
managePreferences : function () {
/* get rid of old-style preferences */
if (midMyPrefB.getPrefType("extensions.mid.dtype.en_en") == midMyPrefB.PREF_BOOL) {
branch = midMyPrefS.getBranch("extensions.mid.dtype.");
branch.deleteBranch("");
}
var i, typ;
/* First run, set factory default */
for (i = 0;
(typ = document.getElementsByTagNameNS(this.midNS, "default-dict-type").item(i));
i++) {
var deftype = typ.getAttribute("label");
if (midMyPrefB.getPrefType("extensions.mid.dtype." + deftype) != midMyPrefB.PREF_BOOL) {
midMyPrefB.setBoolPref("extensions.mid.dtype." + deftype, true);
}
}
/* manage layout */
if (midMyPrefB.getPrefType("extensions.mid.layout.browserup") == midMyPrefB.PREF_BOOL) {
if (midMyPrefB.getBoolPref("extensions.mid.layout.browserup")) {
var t = document.getElementById("mid_tabbox");
var s = document.getElementById("mid_BrowserSplitter");
var b = document.getElementById("mid_BrowserBox");
var p = b.parentNode;
p.removeChild(b);
p.removeChild(t);
p.insertBefore(b, s);
p.appendChild(t);
}
}
/* get throbber setting */
if (midMyPrefB.getPrefType("extensions.mid.disable.throbber") == midMyPrefB.PREF_BOOL) {
if (midMyPrefB.getBoolPref("extensions.mid.disable.throbber")) {
this.WebProgressListener.throbberDisabled = true;
}
}
},
removeAllPreferences : function () {
if (!this.util.confirm(this.util.getLocaleString("delete.allpreferences"))) {
return;
}
var branch = midMyPrefS.getBranch("extensions.mid.");
branch.deleteBranch("");
this.removeDefaultSet();
var popup = document.getElementById("mid_lastusedfilespopup");
while (popup.childNodes.length > 1) {
popup.removeChild(popup.lastChild);
}
this.changeDictionaryName("default");
this.loadDictionaries();
this.util.localAlert("revert.to.original.settings","");
},
arrangeLUFPrefs : function (aLUF) {
var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance(Ci.nsIScriptableUnicodeConverter);
conv.charset = "UTF-8";
var file = aLUF;
var midMyPrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
var savedFilesPrefs = midMyPrefs.getBranch("extensions.mid.lastusedsets.");
var children = savedFilesPrefs.getChildList("", {});
var sortedLUFPrefs = children.sort(); //
var newChildren = [];
var usedFile = "";
newChildren.push(file);
for (i = 0; i < children.length; i++) {
if (savedFilesPrefs.prefHasUserValue(sortedLUFPrefs[i])) {
var nFile = savedFilesPrefs.getComplexValue(sortedLUFPrefs[i], Ci.nsILocalFile);
if (nFile.path != file.path) {
newChildren.push(nFile);
}
}
}
var limit = Math.min(this.MAXREOPENFILES, newChildren.length);
for (i = 0; i < limit; i++) {
savedFilesPrefs.setComplexValue(i + 1, Ci.nsILocalFile, newChildren[i]);
}
// TODO:more testing ...
for (i = newChildren.length + 1; i < this.MAXREOPENFILES + 1; i++) {
if (savedFilesPrefs.prefHasUserValue(i)) {
savedFilesPrefs.clearUserPref(i);
}
}
// try {
// usedFile = conv.ConvertToUnicode(savedFilesPrefs.getCharPref("1"));
// } catch (e) {
// usedFile = savedFilesPrefs.getCharPref("1");
// }
document.getElementById("mid_stat_dictset").value = file.path;
return true;
},
reOpen : function () {
var midMyPrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
var savedFilesPrefs = midMyPrefs.getBranch("extensions.mid.lastusedsets.");
var children = savedFilesPrefs.getChildList("", {});
var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance(Ci.nsIScriptableUnicodeConverter);
conv.charset = "UTF-8";
var menuitem;
var popup = document.getElementById("mid_lastusedfilespopup");
var popupMenuItems = popup.getElementsByTagName("menuitem");
if ( children.length > 0 && popupMenuItems.length == 1 ) {
var separator = document.createElement("menuseparator");
popup.appendChild(separator);
}
var sortedLUFPrefs=children.sort();
for (i = 0; i < children.length; i++ ){
if ( ! savedFilesPrefs.prefHasUserValue( sortedLUFPrefs[i] ) ) continue;
var file = savedFilesPrefs.getComplexValue( sortedLUFPrefs[i], Ci.nsILocalFile);
try {
var menulabel = conv.ConvertToUnicode(savedFilesPrefs.getCharPref(sortedLUFPrefs[i]));
} catch (e) { menulabel = savedFilesPrefs.getCharPref(sortedLUFPrefs[i]);
}
if ( popupMenuItems.length < this.FIRSTDYNAMICMENUITEM + i ) { // existing menuitem?
menuitem = document.createElement("menuitem");
popup.appendChild(menuitem);
} else {
menuitem = popupMenuItems.item(i+1);
}
menuitem.setAttribute("label", menulabel );
menuitem.setAttribute("oncommand",
"mid_mud.fileManager.restoreSet(" + (i+1) +',"' + menulabel.replace(/\\/g,'\\\\') + '");');
}
return true;
},
removeDefaultSet: function () {
var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties)
.get("ProfD", Components.interfaces.nsIFile);
file.append("mid_default.dis");
try {
if (file.exists()) {
file.remove(false);
}
} catch (e) {
if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
this.util.localAlert("file.access.denied", "");
}
else {
alert("i/o error: " + e.name + "-" + e.message);
}
return false;
}
},
changeDictionaryName : function (dName) {
this.dictionary = dName;
switch (this.dictionary) {
case "temporary":
document.getElementById("mid_stat_dictset").value = this.util.getLocaleString("temporary.set");
break;
case "default":
document.getElementById("mid_stat_dictset").value =
this.util.getLocaleString("default.set");
break;
default:
document.getElementById("mid_stat_dictset").value = dName;
}
},
setBrowserURL : function () {
/* Started from a browser */
if (window.opener && window.opener.content.location.href !== "") {
midBrowserStartLocation = window.opener.content.location.href;
domHelper.browserBrowser.setAttribute("src", midBrowserStartLocation);
// domHelper.browserBrowser.markupDocumentViewer.fullZoom = 1.5; //test
document.getElementById("mid_Url").value = midBrowserStartLocation;
}
},
syncBrowserURL : function () {
const nsIWindowMediator = Components.interfaces.nsIWindowMediator;
var windowMediator = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService();
windowMediator = windowMediator.QueryInterface(nsIWindowMediator);
var win = windowMediator.getMostRecentWindow("navigator:browser");
if ( win && win.gBrowser) {
domHelper.browserBrowser.setAttribute("src", win.gBrowser.contentWindow.location);
document.getElementById("mid_Url").value = win.gBrowser.contentWindow.location;
}
},
appendToOldDictionaries : function (midlines) {
var mytabpanels = domHelper.tabpanelsElement;
var nArray = [], dictid, i;
if (this.olddictionary == this.dictionary || this.fromDialog) {
for (i = 0; (iBrowser = mytabpanels.getElementsByTagName("browser").item(i)); i++) {
dictid = iBrowser.xmlDic.getAttribute("dictid");
if (this.dictionary === "default") {
if (this.checkDictChecked(iBrowser.xmlDic)) {
nArray.push(dictid);
}
}
else {
if (this.util.inArray(midlines, dictid)) {
nArray.push(dictid);
}
}
}
}
this.olddictionary = this.dictionary;
if (!midlines) {
return nArray;
}
for (i = 0; i < midlines.length; i++) {
if (this.util.inArray(nArray, midlines[i]) !== true) {
nArray.push(midlines[i]);
}
}
return nArray;
},
loadDictionaries : function (midlines) {
var i, xmlDic, dictType, dictChecked, dtchecked, dictId;
var newDicos = [];
var ITomb = [];
var DTomb = [];
var tps = domHelper.tabpanelsElement;
var mytabs = domHelper.tabsElement;
newDicos = this.appendToOldDictionaries(midlines);
// if (midlines)
this.tabManager.removeTabs();
for (i = 0; (xmlDic = document.getElementsByTagNameNS(this.midNS, "dict").item(i)); i++) {
dictId = xmlDic.getAttribute("dictid");
dictType = xmlDic.getAttribute("type");
if (midlines) {
if (newDicos && (newDicos.join().indexOf(dictId) > -1)) { // csunya
DTomb.push(newDicos.join().indexOf(dictId) / 37);
ITomb[newDicos.join().indexOf(dictId) / 37] = i;
}
}
if (!midlines) {
if (this.checkDictChecked(xmlDic)) {
if (!this.util.inArray(newDicos, dictId)) {
newDicos.push(dictId);
}
DTomb.push(newDicos.join().indexOf(dictId) / 37); // nyilvßn a vΘge
ITomb[newDicos.join().indexOf(dictId) / 37] = i;
}
}
} // for
for (var k in DTomb) {
if (DTomb.hasOwnProperty(k)) {
xmlDic = document.getElementsByTagNameNS(this.midNS, "dict").item(ITomb[k]);
if (xmlDic) {
this.tabManager.createDictionaryTab(xmlDic);
}
}
}
DTomb = null;
ITomb = null;
/* Add progress listeners and find first not collapsed */
var selecteditem = 0;
var myBrowser;
for (i = tps.getElementsByTagName("browser").length - 1;
(myBrowser = tps.getElementsByTagName("browser").item(i));
i--) {
myBrowser.docShell.allowJavascript = true;
if (myBrowser.xmlDic.getAttribute("js") == "disabled") {
myBrowser.docShell.allowJavascript = false;
}
selecteditem = i;
try {
myBrowser.addProgressListener(this.WebProgressListener,
Ci.nsIWebProgress.NOTIFY_STATE_NETWORK);
} catch (e) {
alert("addProgressListener failed");
}
}
mytabs.selectedIndex = selecteditem;
this.fromDialog = false;
},
checkDictChecked : function (xmlDic) {
var dictChecked = false;
var typeChecked = false;
var dictType = xmlDic.getAttribute("type");
var dictId = xmlDic.getAttribute("dictid");
if (midMyPrefB.getPrefType("extensions.mid.dtype." + dictType) == midMyPrefB.PREF_BOOL) {
typeChecked = midMyPrefB.getBoolPref("extensions.mid.dtype." + dictType);
}
else {
return false;
}
if (!typeChecked) {
return false;
}
if (midMyPrefB.getPrefType("extensions.mid." + dictId + "_checked") == midMyPrefB.PREF_BOOL) {
dictChecked = midMyPrefB.getBoolPref("extensions.mid." + dictId + "_checked");
} else {
xmlDic.getAttribute("checked") == "true" ? dictChecked = true : dictChecked = false;
}
if (!dictChecked) {
return false;
}
return true;
},
getDictionaryPreferences : function () {
var midDictArg = {}, midlines = [] ;
this.saveDSet();
if (this.dictionary === "new") {
this.tabManager.removeTabs();
}
midDictArg.dictionary = this.dictionary;
this.olddictionary = this.dictionary;
this.fromDialog = true;
openDialog("choose_dict.xul", "pref",
"modal=1,dialog=1,chrome=1,centerscreen=1,resizable=0", midDictArg);
if (midDictArg.dictionary == "cancelled" ) {
this.dictionary="cancelled";
mid_mud.fileManager.restoreDefaultSet();
return;
};
if (midDictArg.dictionary === "new" || midDictArg.dictionary === "saveas") {
mid_mud.fileManager.saveSetAs(); // changes dictionary name
if (this.dictionary === "new" || this.dictionary === "") {
this.changeDictionaryName("temporary");
}
else {
this.saveDSet();
}
}
else {
this.changeDictionaryName(midDictArg.dictionary);
}
if (midDictArg.mylines) {
midlines = midDictArg.mylines;
this.loadDictionaries(midlines);
} else {
if (midDictArg.result) {
this.loadDictionaries();
}
}
this.fromDialog = false;
},
newDictionarySet : function () {
this.saveDSet();
this.dictionary = "new";
this.getDictionaryPreferences();
},
saveDSet : function () {
// if (!this.util.confirm(this.util.getLocaleString("dictionaryset.save.changes"))) return;
if ((this.dictionary === "temporary") || (this.dictionary === "new")) {
return;
}
if (this.dictionary === "default") {
this.fileManager.saveDefaultSet();
return;
}
this.fileManager.saveNamedSet();
},
updateStatusBarCounter : function () {
document.getElementById("mid_stat_counter").value=mid_mud.transMemory.getRowCount();
}
};
// members //
mid_mud.WebProgressListener = {
progresscounter : 0,
throbberDisabled : false,
QueryInterface: function (iid) {
if (iid.equals(Ci.nsIWebProgressListener) ||
iid.equals(Ci.nsISupportsWeakReference) ||
iid.equals(Ci.nsISupports)) {
return this;
}
throw Components.results.NS_ERROR_NO_INTERFACE;
},
onProgressChange : function (wp, req, cur, max, curtotal, maxtotal) {},
onStateChange : function (wp, req, state, status) {
if ((state & Ci.nsIWebProgressListener.STATE_STOP) &&
(state & Ci.nsIWebProgressListener.STATE_IS_NETWORK)) {
if (this.progresscounter > 0) {
this.progresscounter = this.progresscounter - 1;
}
if (this.progresscounter === 0) {
document.getElementById("mid_stoploadbutton").disabled = true;
}
if (!this.throbberDisabled) {
setTimeout(window.mid_mud.tabManager.setThrobber, 0, wp.DOMWindow, false);
}
}
if ((state & Ci.nsIWebProgressListener.STATE_START) &&
(state & Ci.nsIWebProgressListener.STATE_IS_NETWORK)) {
document.getElementById("mid_stoploadbutton").disabled = false;
this.progresscounter = this.progresscounter + 1;
if (!this.throbberDisabled) {
setTimeout(window.mid_mud.tabManager.setThrobber, 0, wp.DOMWindow, true);
}
}
if ((state & Ci.nsIWebProgressListener.STATE_TRANSFERRING)) {
if (!this.throbberDisabled) {
setTimeout(window.mid_mud.tabManager.setThrobber, 0, wp.DOMWindow, false);
}
}
},
onLocationChange : function (wp, req, loc) {},
onStatusChange : function (wp, req, status, message) {},
onSecurityChange : function (wp, req, state) {}
};
mid_mud.focusManager = {
preventFocusReset : false,
lastfocused : "micimacko",
focusSearchField : function () {
domHelper.inputElement.focus();
domHelper.f2.setAttribute("class", "midf2hidden");
this.preventFocusReset = false;
},
checkFocusedElement : function (event) {
if (window.fullScreen) {
this.preventFocusReset = true;
return;
} // there is no input field
cmdDispatcher = document.commandDispatcher;
if (event.target.id == "mid_searchWord") {
domHelper.f2.setAttribute("class", "midf2hidden");
}
if (this.preventFocusReset) {
return;
}
if (event.target && event.target.id == "mid_Url") {
this.preventFocusReset = true;
}
if (cmdDispatcher.focusedElement) {
if (cmdDispatcher.focusedElement.tagName) {
if (cmdDispatcher.focusedElement.id == "mid_searchWord") {
domHelper.f2.setAttribute("class", "midf2hidden");
}
if (cmdDispatcher.focusedElement.tagName != this.lastfocused) {
this.lastfocused = cmdDispatcher.focusedElement.tagName;
setTimeout(window.mid_mud.focusManager.focusSearchField, 20);
}
} else {
setTimeout(window.mid_mud.focusManager.focusSearchField, 20);
}
} else {
setTimeout(window.mid_mud.focusManager.focusSearchField, 20);
}
},
checkClickedElement : function (event) {
this.preventFocusReset = true;
},
checkKeypressElement : function (event) {
this.preventFocusReset = true;
if (event.altKey) {
return;
}
if (event.originalTarget.tagName) {
if (event.originalTarget.id == "mid_searchWord") {
this.preventFocusReset = false;
}
if (event.originalTarget.tagName == "HTML") {
this.preventFocusReset = true;
}
} else {
this.preventFocusReset = false;
}
// alert (event.keyCode);
if (event.keyCode == 9) {
this.preventFocusReset = true;
}
}
};
function domHelperObject() {
this.tabpanelsElement = document.getElementById("mid_tabpanels");
this.tabsElement = document.getElementById("mid_tabs");
this.tabboxElement = document.getElementById("mid_tabbox");
this.inputElement = document.getElementById("mid_searchWord");
this.f2 = document.getElementById("mid_focusLabel");
this.browserBrowser = document.getElementById("mid_MainBrowser");
this.mainMenubar = document.getElementById("mid_menubar");
this.mainStatusbar = document.getElementById("mid_statusbar");
this.browserSplitter = document.getElementById("mid_BrowserSplitter");
this.browserBox = document.getElementById("mid_BrowserBox");
this.wordsTree = document.getElementById("mid_wordstree");
this.url = document.getElementById("mid_Url");
this.sideBar = document.getElementById("mid_sidebar");
};
mid_mud.tabManager = {
tabIconic : "false" ,
Init : function () {
this.tabPanelsElement = document.getElementById("mid_tabpanels");
this.tabsElement = document.getElementById("mid_tabs");
this.tabIconic = this.tabsElement.getAttribute("iconic");
},
createDictionaryTab : function (xmlDic) {
var newTab, newBrowser;
newTab = document.createElement("tab");
mid_mud.util.populateWithAttributes(newTab,
"id", "tab" + xmlDic.getAttribute("dictid"),
"context", "mid_tabcontextpopup",
"label", xmlDic.getAttribute("label"),
"image", xmlDic.getAttribute("fav"),
"tooltiptext", xmlDic.getAttribute("label") + " : " + xmlDic.getAttribute("home"),
"dicthome", xmlDic.getAttribute("home"),
"iconic", this.tabIconic);
this.tabsElement.appendChild(newTab);
newBrowser = document.createElement("browser");
newBrowser.xmlDic = xmlDic;
mid_mud.util.populateWithAttributes(newBrowser,
"id", "b" + xmlDic.getAttribute("dictid"),
"type", "content-primary",
"context", "mid_browsercontextpopup",
"src", xmlDic.getAttribute("home"),
"homepage", xmlDic.getAttribute("home"),
"ondblclick", "mid_mud.lookup.lookupFromContext()");
this.tabPanelsElement.appendChild(newBrowser);
},
styleTabs : function (event) {
var curtab, curpanel, i
if (event) {
var cButton = event.originalTarget;
if (cButton.localName != "toolbarbutton") {
return; // elsewere on tabs
}
}
for (i = 0; (curtab = this.tabsElement.getElementsByTagName("tab").item(i)); i++) {
curpanel = document.getElementById(curtab.linkedpanel);
if (this.tabIconic == "true" ) {
curtab.setAttribute("iconic", "false");
}
else {
curtab.setAttribute("iconic", "true");
}
}
if (cButton) {
if (this.tabIconic == "true" ) {
cButton.setAttribute("iconic", "false");
this.tabIconic = "false"
}
else {
cButton.setAttribute("iconic", "true");
this.tabIconic = "true"
}
}
domHelper.tabsElement.setAttribute("iconic",this.tabIconic);
},
removeTabs : function () {
while (this.tabPanelsElement.hasChildNodes()) {
try {
this.tabPanelsElement.firstChild.removeProgressListener(mid_mud.WebProgressListener);
}
catch (e) {
alert("removeProgressListener failed");
}
this.tabPanelsElement.removeChild(this.tabPanelsElement.firstChild);
}
while (this.tabsElement.hasChildNodes()) {
this.tabsElement.removeChild(this.tabsElement.firstChild);
}
},
setThrobber : function (dm, image) {
var doc = dm;
if (!doc) { // ff2
return;
}
var tabsArray = domHelper.tabsElement.getElementsByTagName("tab");
var tabPanelsArray = domHelper.tabpanelsElement; // this.tabPanelsElement;
var i, iBrowser, iTab;
for (i = 0;(iBrowser = tabPanelsArray.getElementsByTagName("browser").item(i)); i++) {
iTab = tabsArray.item(i);
if (iBrowser.currentURI && iBrowser.currentURI.spec == doc.document.location.href) {
if (image) {
iTab.setAttribute("busy", "true");
iTab.removeAttribute("image");
}
else {
if (iTab.hasAttribute("busy")) {
iTab.removeAttribute("busy");
iTab.setAttribute("image", iBrowser.xmlDic.getAttribute("fav"));
}
}
}
}
},
closeTab : function () {
var dictTabId = document.popupNode.id;
var dictBrowserId = dictTabId.replace("tab", "b");
var dictTabToRemove = document.getElementById(dictTabId);
var dictBrowserToRemove = document.getElementById(dictBrowserId);
if (dictTabToRemove.getAttribute("selected", "true")) {
this.tabsElement.advanceSelectedTab(1, true);
}
try {
dictBrowserToRemove.removeProgressListener(mid_mud.WebProgressListener);
}
catch (e) {}
this.tabPanelsElement.removeChild(dictBrowserToRemove);
this.tabsElement.removeChild(dictTabToRemove);
this.tabPanelsElement.selectedIndex = this.tabsElement.selectedIndex; //??
var dictId = dictTabId.replace("tab", "");
midMyPrefB.setBoolPref("extensions.mid." + dictId + "_checked", false);
},
openHomePage : function () {
var dictTab = document.getElementById(document.popupNode.id);
window.open(dictTab.getAttribute("dicthome"));
},
dictTabPopupShowing : function () {
// nothing to do as for now
// alert(document.popupNode.id);
},
dragAndDrop : {
onDragStart: function (event, transferData, action) {
var tabArray = domHelper.tabsElement.getElementsByTagName("tab");
var myIndex = -1;
for (var i = 0; i < tabArray.length; i++) {
if (event.target.id == tabArray[i].id) {
myIndex = i;
}
}
mid_mud.util.dumpToConsole(myIndex);
if (myIndex == -1) {
return;
}
this.index = myIndex;
transferData.data = new TransferData();
transferData.data.addDataForFlavour("text/x-mid-tab", 'nyul');
},
getSupportedFlavours : function () {
var flavours = new FlavourSet();
flavours.appendFlavour("text/x-mid-tab");
return flavours;
},
onDragOver : function(event,flavour,session) {
return true;
},
onDragEnter : function(event, session) {
},
onDragExit : function(event, session) {
},
canDrop: function(event, session) {
if (session.sourceNode &&
session.sourceNode.parentNode == document.getElementById("mid_tabs") &&
((event.screenX >= session.sourceNode.boxObject.screenX &&
event.screenX <= (session.sourceNode.boxObject.screenX +
session.sourceNode.boxObject.width)) &&
(event.screenY >= session.sourceNode.boxObject.screenY &&
event.screenY <= (session.sourceNode.boxObject.screenY +
session.sourceNode.boxObject.height)))
)
return false;
return true;
},
onDrop: function (event, dropData, session) {
var newIndex=this.getNewIndex(event);
if (newIndex != this.index ) {
this.moveTabTo(newIndex, session);
}
},
moveTabTo: function (newIndex, session) {
var tabs = domHelper.tabsElement;
var tabpanels = domHelper.tabpanelsElement;
var draggedBrowser = tabpanels.getElementsByTagName("browser").item(this.index);
var sh = draggedBrowser.sessionHistory;
var originalHistory = this.copyTabHistory(sh);
try {
draggedBrowser.removeProgressListener(mid_mud.WebProgressListener);
} catch (e) {}
tabs.insertBefore(session.sourceNode, tabs.getElementsByTagName("tab").item(newIndex));
tabpanels.insertBefore(draggedBrowser, tabpanels.getElementsByTagName("browser").item(newIndex));
tabs.selectedItem = session.sourceNode;
tabpanels.selectedPanel = draggedBrowser;
draggedBrowser.addProgressListener(mid_mud.WebProgressListener,
Ci.nsIWebProgress.NOTIFY_STATE_NETWORK);
this.restoreDraggedHistory(draggedBrowser.webNavigation, originalHistory);
},
getNewIndex: function (event) {
var tabArray = document.getElementById("mid_tabs").getElementsByTagName('tab');
for (var i = 0; i < tabArray.length; i++)
if (event.clientX < tabArray[i].boxObject.x + tabArray[i].boxObject.width / 2)
if (event.clientY < tabArray[i].boxObject.y + tabArray[i].boxObject.height)
return i;
return tabArray.length;
},
copyTabHistory: function (originalHistory) {
var range = {start : 0, length : originalHistory.count};
var copiedHistory = [];
for (var i = range.start; i < range.length; i++) {
copiedHistory.push(originalHistory.getEntryAtIndex(i, false));
}
copiedHistory.index = originalHistory.index;
return copiedHistory;
},
restoreDraggedHistory: function(webNav, originalHistory) {
var newHistory = webNav.sessionHistory;
newHistory.QueryInterface(Components.interfaces.nsISHistoryInternal);
// delete history entries if they are present
if (newHistory.count > 0)
newHistory.PurgeHistory(newHistory.count);
for (var i = 0; i < originalHistory.length; i++) {
var entry = originalHistory[i].QueryInterface(Components.interfaces.nsISHEntry);
var newEntry = this.restoreHistoryEntry(entry);
if (newEntry)
newHistory.addEntry(newEntry, true);
}
// Go to current history location
if (originalHistory.index < originalHistory.length)
gotoHistoryIndex(10);
function gotoHistoryIndex(attempts) {
try {
webNav.gotoIndex(originalHistory.index);
}
catch(e) {
// do some math to increase the timeout
// each time we try to update the history index
if (attempts)
setTimeout(gotoHistoryIndex, (11 - attempts) * (15 - attempts), --attempts);
}
}
},
restoreDraggedHistory: function (webNav, originalHistory) {
function gotoHistoryIndex(attempts) {
try {
webNav.gotoIndex(originalHistory.index);
}
catch (e) {
// do some math to increase the timeout
// each time we try to update the history index
if (attempts) {
setTimeout(gotoHistoryIndex, (11 - attempts) * (15 - attempts), --attempts);
}
}
}
var newHistory = webNav.sessionHistory;
newHistory.QueryInterface(Components.interfaces.nsISHistoryInternal);
// delete history entries if they are present
if (newHistory.count > 0) {
newHistory.PurgeHistory(newHistory.count);
}
for (var i = 0; i < originalHistory.length; i++) {
var entry = originalHistory[i].QueryInterface(Components.interfaces.nsISHEntry);
var newEntry = this.restoreHistoryEntry(entry);
if (newEntry) {
newHistory.addEntry(newEntry, true);
}
}
// Go to current history location
if (originalHistory.index < originalHistory.length) {
gotoHistoryIndex(10);
}
},
restoreHistoryEntry: function (aEntry) {
if (!aEntry) {
return null;
}
aEntry = aEntry.QueryInterface(Components.interfaces.nsISHContainer);
var newEntry = aEntry.clone();
newEntry = newEntry.QueryInterface(Components.interfaces.nsISHContainer);
newEntry.loadType = Math.floor(aEntry.loadType);
if (aEntry.childCount) {
for (var j = 0; j < aEntry.childCount; j++) {
var childEntry = this.restoreHistoryEntry(aEntry.GetChildAt(j));
if (childEntry) {
newEntry.AddChild(childEntry, j);
}
}
}
return newEntry;
}
}
};
mid_mud.layoutManager = {
fullScreen : function () {
var midmyelement, i;
window.fullScreen = !window.fullScreen;
document.getElementById("mid_viewFullScreen").setAttribute("checked", window.fullScreen);
for (i = 0; (midmyelement = document.getElementsByTagName("toolbar").item(i)); i++) {
midmyelement.setAttribute("collapsed", window.fullScreen);
}
for (i = 0; (midmyelement = document.getElementsByTagName("statusbar").item(i)); i++) {
midmyelement.setAttribute("collapsed", window.fullScreen);
}
for (i = 0; (midmyelement = document.getElementsByTagName("menubar").item(i)); i++) {
midmyelement.setAttribute("collapsed", window.fullScreen);
}
},
browserView : function () {
var browserSplitter = document.getElementById("mid_BrowserSplitter");
var browser = document.getElementById("mid_BrowserBox");
if (browser.getAttribute("collapsed") == "true") {
document.getElementById("mid_viewpopupbrowseritem").setAttribute("checked", "true");
browser.setAttribute("collapsed", "false");
browserSplitter.setAttribute("collapsed", "false");
} else {
document.getElementById("mid_viewpopupbrowseritem").setAttribute("checked", "false");
browser.setAttribute("collapsed", "true");
browserSplitter.setAttribute("collapsed", "true");
}
},
histView: function () {
var wordsTree = document.getElementById("mid_wordstree");
if (wordsTree.getAttribute("collapsed") == "true") {
document.getElementById("mid_viewpopuphistitem").setAttribute("checked", "true");
wordsTree.setAttribute("collapsed", "false");
} else {
document.getElementById("mid_viewpopuphistitem").setAttribute("checked", "false");
wordsTree.setAttribute("collapsed", "true");
}
this.checkSideBar();
},
checkSideBar: function () {
var s = domHelper.sideBar;
var sc = true;
for (var i = 0; i < s.childNodes.length; i++) {
if ( s.childNodes[i].collapsed == false) {
sc = false;
break;
}
}
s.collapsed = sc;
},
statusbarView: function () {
var statusbar = document.getElementById("mid_statusbar");
if (statusbar.getAttribute("collapsed") == "true") {
document.getElementById("mid_viewpopupstatusbaritem").setAttribute("checked", "true");
statusbar.setAttribute("collapsed", "false");
} else {
document.getElementById("mid_viewpopupstatusbaritem").setAttribute("checked", "false");
statusbar.setAttribute("collapsed", "true");
}
}
};
mid_mud.helpMenu = {
showAllDictionaries : function () {
var myff = Cc["@mozilla.org/file/directory_service;1"]
.getService(Ci.nsIProperties)
.get("ProfD", Ci.nsIFile);
var ios = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
var fileHandler = ios.getProtocolHandler("file")
.QueryInterface(Ci.nsIFileProtocolHandler);
var URL = fileHandler.getURLSpecFromFile(myff);
var fURL = "jar:" + URL +
"/extensions/{9ef1e09b-d4b2-4a55-ac3e-1cb330546bec}" +
"/chrome/mid.jar!/content/dictionaries.xml";
var mURL = "jar:" + URL + "/chrome/mid.jar!/content/dictionaries.xml";
var showDicos = {
Firefox : function () { window.open(fURL); },
Iceweasel : function () { window.open(fURL); },
Flock : function () { window.open(fURL); },
Netscape : function () { window.open(fURL); },
SeaMonkey : function () { window.open(fURL); },
mid : function () {
var myff = Cc["@mozilla.org/file/directory_service;1"]
.getService(Ci.nsIProperties)
.get("resource:app", Ci.nsIFile);
var URL = fileHandler.getURLSpecFromFile(myff);
var xURL = URL + "chrome/content/mid/dictionaries.xml";
window.open(xURL);
}
};
mid_mud.util.browserWrapper(showDicos);
},
aboutBox : function () {
openDialog("about.xul", "About mid",
"chrome,resizeable,centerscreen,dialog,min-width=350px");
},
showHomePage : function () {
window.open("http://mid.mozdev.org");
}
};
mid_mud.fileManager = {
fileWriter : function (file) {
var fileStream =
Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
try {
fileStream.init(file, 0x04 | 0x08 | 0x20, 420, 0);
} catch (e) {
if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
mid_mud.util.localAlert("file.access.denied", "");
return false;
} else {
alert("fileManager.fileWriter: i/o error: " + e.name + "-" + e.message);
return false;
}
}
var i, dictTab, dictId;
for (i = 0; (dictTab = document.getElementsByTagName("tab").item(i)); i++) {
dictId = dictTab.id.replace(/^tab/, "") + ";" + dictTab.label;
fileStream.write(dictId + "\n", dictId.length + 1);
}
fileStream.close();
return true;
},
fileReader : function (file, midlines) {
var is =
Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
try {
is.init(file, 1, 444, false);
} catch (e) {
if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
mid_mud.util.localAlert("file.access.denied", "");
}
else {
alert("fileManager.fileReader: i/o error: " + e.name + "-" + e.message);
}
return false;
}
is.QueryInterface(Ci.nsILineInputStream);
// read lines into array
var midline = {}, hasmore;
do {
hasmore = is.readLine(midline);
var dictId = midline.value.replace(/;.*$/, "");
dictId = dictId.replace(/(.{37}).*/, "$1");
midlines.push(dictId);
} while (hasmore);
is.close();
return true;
},
saveSetAs : function () {
var nsIFilePicker = Ci.nsIFilePicker;
var file;
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.init(window, mid_mud.util.getLocaleString("choose.file"), nsIFilePicker.modeSave);
fp.appendFilters(nsIFilePicker.filterAll);
if (fp.show() == nsIFilePicker.returnCancel) {
return false;
}
file = fp.file;
if (!this.fileWriter(file)) {
return false;
}
if (typeof(mid_mud.arrangeLUFPrefs) === "function") {
mid_mud.arrangeLUFPrefs(file);
}
// mid_mud.util.localAlert("file.saved", "");
mid_mud.changeDictionaryName(this.getDictionaryFilename());
},
saveNamedSet : function () {
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
var savedFilesPrefs = midMyPrefS.getBranch("extensions.mid.lastusedsets.");
if (savedFilesPrefs.prefHasUserValue(1)) {
file = savedFilesPrefs.getComplexValue(1, Components.interfaces.nsILocalFile);
}
else {
return false;
}
if (!this.fileWriter(file)) {
return false;
}
return true;
},
saveDefaultSet : function () {
var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties)
.get("ProfD", Components.interfaces.nsIFile);
file.append("mid_default.dis");
if (!this.fileWriter(file)) {
return false;
}
return true;
},
restoreSet : function (filePrefNum, filename) {
mid_mud.saveDSet(); //**
var def, fp, file, midlines = [];
var nsIFilePicker = Ci.nsIFilePicker;
if (typeof(filePrefNum) != 'number') {
fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.init(window, mid_mud.util.getLocaleString("choose.file"), nsIFilePicker.modeRead);
fp.appendFilters(nsIFilePicker.filterAll);
if (fp.show() == nsIFilePicker.returnCancel) {
return false;
}
file = fp.file;
filename = "";
} else {
var savedFilesPrefs = midMyPrefS.getBranch("extensions.mid.lastusedsets.");
if (!savedFilesPrefs.prefHasUserValue(filePrefNum)) {
mid_mud.util.localAlert("preference.not.found" , "extensions.mid.lastusedsets." + filePrefNum);
return false;
}
file = savedFilesPrefs.getComplexValue(filePrefNum, Ci.nsILocalFile);
if (!file.exists()) {
mid_mud.util.localAlert("file.not.found", "");
return false;
}
}
if (!this.fileReader(file, midlines)) {
return false;
};
mid_mud.arrangeLUFPrefs(file);
if (filename === "") {
filename = this.getDictionaryFilename();
}
mid_mud.midFromRestore = true; // not used
mid_mud.changeDictionaryName(filename);
mid_mud.loadDictionaries(midlines);
return true;
},
restoreDefaultSet : function () {
var midlines = [];
if (mid_mud.dictionary != "default") {
if (mid_mud.dictionary != "cancelled") {
mid_mud.saveDSet();
}
}
mid_mud.changeDictionaryName("default");
var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties)
.get("ProfD", Components.interfaces.nsIFile);
file.append("mid_default.dis");
if (!file.exists() || (file.fileSize == 0)) {
mid_mud.changeDictionaryName("default");
mid_mud.loadDictionaries();
return false;
}
if (!this.fileReader(file, midlines)) {
return false;
};
mid_mud.midFromRestore = true; // not used
mid_mud.changeDictionaryName("default");
mid_mud.loadDictionaries(midlines);
return true;
},
getDictionaryFilename : function () {
var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance(Ci.nsIScriptableUnicodeConverter);
conv.charset = "UTF-8";
var savedFilesPrefs = midMyPrefS.getBranch("extensions.mid.lastusedsets.");
if (savedFilesPrefs.prefHasUserValue(1)) {
return conv.ConvertToUnicode(savedFilesPrefs.getCharPref(1));
}
return "Unknown";
}
};
mid_mud.lookup = {
lookupAgain : function (event) {
var word = mid_mud.transMemory.getWord(event);
if (!word) {
return; // editing definition
}
domHelper.inputElement.value = word.getAttribute("label");
mid_mud.saveInHistory = false;
this.lookupWord(null);
mid_mud.saveInHistory = true;
},
lookupFromContext : function () {
domHelper.inputElement.value = this.getSelectionForLookup();
this.lookupWord(null);
},
getSelectionForLookup : function () {
var selection = null;
var focusedWindow = document.commandDispatcher.focusedWindow;
selection = focusedWindow.getSelection();
if (!selection) {
return selection;
}
if (document.popupNode) {
var node = document.popupNode;
var nodeLocalName = document.popupNode.localName.toUpperCase();
if ((nodeLocalName == "TEXTAREA") ||
(nodeLocalName == "INPUT" && node.type == "text")) {
selection = node.value.substring(node.selectionStart, node.selectionEnd);
}
}
return selection;
},
convertLookupWord : function (b, w) {
var chs = null, cw = "";
var converter = Cc['@mozilla.org/intl/texttosuburi;1']
.createInstance(Ci.nsITextToSubURI);
if (!(chs = b.xmlDic.getAttribute("inputencoding"))) {
chs = b.contentDocument.characterSet;
}
try {
cw = converter.ConvertAndEscape(chs, w);
} catch (e) {
cw = w;
}
return cw;
},
lookupWord : function (event) {
if (event && event.originalTarget.nodeName == "treechildren") {
return;
}
// lehet, hogy ez elΘg
if (event && event.originalTarget.nodeName == 'command' &&
document.commandDispatcher.focusedElement.id != "mid_searchWord") {
return;
}
var i, url, smyWord, myBrowser;
var myWord = domHelper.inputElement.value;
myWord = myWord.replace(/['"+!%\\\/=\(\)\[\]\{\},\.\-?:_ <>]*$/g, "");
if (myWord == "") {
return;
}
domHelper.inputElement.value = myWord;
for (i = 0; (myBrowser = document.getElementsByTagName("browser").item(i)); i++) {
if (myBrowser.getAttribute("id") != "mid_MainBrowser") {
// myBrowser.markupDocumentViewer.fullZoom = 1.5; // temp
smyWord = this.convertLookupWord(myBrowser, myWord);
if (myBrowser.xmlDic.getAttribute("method") == "POST") {
if (myBrowser.xmlDic.getAttribute("engine_name")) {
this.postInternalEngine(myBrowser, smyWord ) ; // FF's search engine
} else {
this.postURI(myBrowser, smyWord);
}
} else {
if (myBrowser.xmlDic.getAttribute("method") == "func") {
searchfunction = myBrowser.xmlDic.getAttribute("function_name");
try {
mid_mud.dictSpecific[searchfunction](myBrowser, myWord);
} catch (e) {
alert("Function error:" + searchfunction);
}
} else {
url = myBrowser.xmlDic.getAttribute("url");
if ( url != "" ) myBrowser.setAttribute("src", url.replace("XXX", smyWord));
} // normal
}
}
}
domHelper.inputElement.focus();
domHelper.inputElement.setSelectionRange(0, domHelper.inputElement.textLength);
mid_mud.backCounter++;
mid_mud.dictBrowsers.updateImages();
if (mid_mud.transMemory.getLastWord() == myWord) { // same as the last word
return;
}
if (!mid_mud.saveInHistory) {
return;
}
mid_mud.transMemory.saveWordToTree(myWord, "");
},
postURI : function (browser, word) {
var dataString = browser.xmlDic.getAttribute("inputs").replace("XXX", word);
var postData = Cc["@mozilla.org/network/mime-input-stream;1"].
createInstance(Ci.nsIMIMEInputStream);
var stringStream = Cc["@mozilla.org/io/string-input-stream;1"].
createInstance(Ci.nsIStringInputStream);
stringStream.setData(dataString, -1);
postData.addHeader("Content-Type", "application/x-www-form-urlencoded");
postData.addContentLength = true;
postData.setData(stringStream);
var url = browser.xmlDic.getAttribute("url");
browser.webNavigation.loadURI(url,
browser.webNavigation.LOAD_FLAGS_NONE,
browser.currentURI ,
postData, null);
},
postInternalEngine : function ( browser, word ) {
var searchService = Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService);
var engine_name = browser.xmlDic.getAttribute("engine_name");
var engine = searchService.getEngineByName(engine_name)
if (!engine) {
return
}
var submission = engine.getSubmission(word, null);
var postData = submission.postData;
var url = browser.xmlDic.getAttribute("url");
browser.webNavigation.loadURI(url,
browser.webNavigation.LOAD_FLAGS_NONE,
browser.currentURI ,
postData, null);
}
};
mid_mud.mainBrowser = {
popupShowing : function () {
if (mid_mud.lookup.getSelectionForLookup() == '') {
document.getElementById("mid_mainBCL").setAttribute("disabled", "true");
document.getElementById("mid_mainBCC").setAttribute("disabled", "true");
} else {
document.getElementById("mid_mainBCL").setAttribute("disabled", "false");
document.getElementById("mid_mainBCC").setAttribute("disabled", "false");
}
var mid_mb = domHelper.browserBrowser;
if (mid_mb.canGoBack == false) {
document.getElementById("mid_mainBCB").setAttribute("disabled", "true");
} else {
document.getElementById("mid_mainBCB").setAttribute("disabled", "false");
}
if (mid_mb.canGoForward == false){
document.getElementById("mid_mainBCF").setAttribute("disabled", "true");
} else {
document.getElementById("mid_mainBCF").setAttribute("disabled", "false");
}
},
goBack : function () {
domHelper.browserBrowser.goBack();
},
goForward : function () {
domHelper.browserBrowser.goForward();
},
navigate : function () {
var midUrl = document.getElementById("mid_Url").value;
var regexp = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
var ar = regexp.exec(midUrl);
if (!ar[1]) {
midUrl = "http://" + midUrl;
}
// domHelper.browserBrowser.markupDocumentViewer.fullZoom = 1.5; // temp
domHelper.browserBrowser.setAttribute("src", midUrl);
}
};
mid_mud.dictBrowsers = {
popupShowing : function (event) {
if (mid_mud.lookup.getSelectionForLookup() == "") {
document.getElementById("mid_BCL").setAttribute("disabled", "true");
document.getElementById("mid_BCC").setAttribute("disabled", "true");
} else {
document.getElementById("mid_BCL").setAttribute("disabled", "false");
document.getElementById("mid_BCC").setAttribute("disabled", "false");
}
var myTabPanel = domHelper.tabpanelsElement;
if (myTabPanel.selectedPanel.canGoBack === false) {
document.getElementById("mid_BCB").setAttribute("disabled", "true");
} else {
document.getElementById("mid_BCB").setAttribute("disabled", "false");
}
if (myTabPanel.selectedPanel.canGoForward === false) {
document.getElementById("mid_BCF").setAttribute("disabled", "true");
} else {
document.getElementById("mid_BCF").setAttribute("disabled", "false");
}
},
allBrowsersStop : function () {
var myBrowser;
const nsIWebNavigation = Ci.nsIWebNavigation;
const flags = nsIWebNavigation.STOP_ALL;
for (i = 0; (myBrowser = document.getElementsByTagName("browser").item(i)); i++) {
try {
if (myBrowser.getAttribute("id") != "mid_MainBrowser") {
myBrowser.webNavigation.stop(flags);
}
} catch (e) {
alert(myBrowser.getAttribute("homepage"));
}
}
},
updateImages : function () {
var b = document.getElementById("back_image");
var f = document.getElementById("for_image");
if (mid_mud.forwardCounter < 1) {
f.setAttribute("canwalk", "false");
}
else {
f.setAttribute("canwalk", "true");
}
if (mid_mud.backCounter < 0) {
b.setAttribute("canwalk", "false");
} else {
b.setAttribute("canwalk", "true");
}
},
thisBrowserBack : function () {
domHelper.tabpanelsElement.selectedPanel.goBack();
},
thisBrowserForward : function () {
domHelper.tabpanelsElement.selectedPanel.goForward();
},
allForward : function () {
var myBrowser, word, i;
if (mid_mud.forwardCounter < 0) {
return false;
}
for (i = 0; (myBrowser = document.getElementsByTagName("browser").item(i)); i++) {
if (myBrowser.getAttribute("id") == "mid_MainBrowser") {
continue;
}
if (myBrowser.xmlDic.getAttribute("method") == "POST") {
word = document.getElementsByTagName("treecell").item((mid_mud.backCounter + 1) * 2);
mid_mud.lookup.postURI(myBrowser,
mid_mud.lookup.convertLookupWord(myBrowser,
word.getAttribute("label")));
} else {
if (myBrowser.webNavigation.canGoForward) {
myBrowser.webNavigation.goForward();
}
}
}
mid_mud.backCounter++;
mid_mud.forwardCounter--;
mid_mud.dictBrowsers.updateImages();
},
allBack : function () {
var myBrowser, word, i;
if ( mid_mud.backCounter < -1 ) {
return false;
}
for (i = 0; (myBrowser = document.getElementsByTagName("browser").item(i)); i++) {
if (myBrowser.getAttribute("id") == "mid_MainBrowser") {
continue;
}
if ((myBrowser.xmlDic.getAttribute("method") == "POST") && (mid_mud.backCounter!=0)) {
word = document.getElementsByTagName("treecell").item((mid_mud.backCounter + 1) * 2);
mid_mud.lookup.postURI(myBrowser,
mid_mud.lookup.convertLookupWord(myBrowser,
word.getAttribute("label")));
} else {
if (myBrowser.webNavigation.canGoBack) {
myBrowser.webNavigation.goBack();
}
}
}
mid_mud.forwardCounter++;
mid_mud.backCounter--;
mid_mud.dictBrowsers.updateImages();
}
};
mid_mud.finder = {
positionToFirstHit : function (doc) {
var keres = domHelper.inputElement.value;
var cw = doc.body.clientWidth / 2;
var reps = new RegExp(keres, 'gi');
var s = doc.body.innerHTML.replace(reps, '<midtag>' + keres + '</midtag>');
doc.body.innerHTML = s;
var a = [];
a = doc.getElementsByTagName("midtag");
for (var i = 0; i < a.length; i++ ) {
var e = a[i];
var r = e.getBoundingClientRect();
if (r.left > cw) {
j = i;
} else {
break;
}
}
if (e) {
e.setAttribute("style","background-color : yellow;");
doc.defaultView.scroll(1, r.top - 10);
}
},
findNext : function (b) {
var findInst;
if (!b || !domHelper.inputElement.value) {
return null;
}
b.contentWindow.focus();
findInst = b.webBrowserFind;
findInst.searchString = domHelper.inputElement.value;
findInst.matchCase = false;
findInst.wrapFind = true;
findInst.findBackwards = false;
findInst.entireWord = false;
findInst.searchFrames = true;
try {
findInst.findNext();
} catch (e) {};
},
findStringOnPage : function () {
var keres = domHelper.inputElement.value;
if (keres == "") {
return;
}
if (document.commandDispatcher.focusedWindow &&
(domHelper.browserBrowser.currentURI.spec ==
document.commandDispatcher.focusedWindow.location)) {
this.findNext(domHelper.browserBrowser);
return;
}
if (domHelper.tabboxElement.selectedIndex > -1) {
var win = domHelper.tabboxElement.selectedPanel.contentWindow;
this.findNext(domHelper.tabboxElement.selectedPanel);
}
},
findInPage : function () {
if (domHelper.tabboxElement.selectedIndex > -1) {
this.findNext(domHelper.tabboxElement.selectedPanel);
var sel = document.commandDispatcher.focusedWindow.getSelection(); // bad hack, not an input box
if (sel == "")
this.findNext(domHelper.tabboxElement.selectedPanel); // hope it is not an input field
}
},
findInNextPage : function (searchFlag) { // simplify me, we have no collapsed browsers yet
var tabbox = domHelper.tabboxElement;
var t = domHelper.tabboxElement.selectedPanel;
if (domHelper.tabboxElement.selectedIndex > -1) {
if (!t.nextSibling) {
tabbox.selectedIndex = 0;
} else {
tabbox.selectedIndex++;
}
if (false) { // searchFlag
t = domHelper.tabboxElement.selectedPanel;
if (!t.contentDocument.midTainted) {
this.positionToFirstHit(t.contentDocument);
}
t.contentDocument.midTainted=true;
}
}
},
findInPrevPage : function (searchFlag) {
var tabbox = domHelper.tabboxElement;
var t = domHelper.tabboxElement.selectedPanel;
if (domHelper.tabboxElement.selectedIndex > -1) {
if (!t.previousSibling) {
tabbox.selectedIndex = domHelper.tabpanelsElement.childNodes.length - 1;
} else {
tabbox.selectedIndex--;
}
if (false) { // searchFlag ** experimental, not in prod. release **
t = domHelper.tabboxElement.selectedPanel;
if (!t.contentDocument.midTainted) {
this.positionToFirstHit(t.contentDocument);
}
t.contentDocument.midTainted=true;
}
}
}
};
mid_mud.dictSpecific = {
cambFrEn : function (browser, word) {
word = word.toLowerCase();
word = mid_mud.util.stripAccents(word);
var url = browser.xmlDic.getAttribute("url");
browser.setAttribute("src", url.replace("XXX", word));
},
onetRuPl : function (browser, word) {
word = mid_mud.util.toUniNumber(word);
var url = browser.xmlDic.getAttribute("url");
browser.setAttribute("src", url.replace("XXX", word));
},
oroszmagyar : function (browser, word) { // not used...later?
browser.contentDocument.getElementById("word").setAttribute("value", word);
browser.contentWindow[Dictionary][search]();
}
};
mid_mud.transMemory = {
popupShowing : function (event) {
midRowCounter = -1; // global
var row = {}, col = {}, child = {};
var target = document.popupNode;
if (target.localName == "treechildren") {
var tree = document.getElementById("mid_wordstree");
tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, child);
midRowCounter = row.value;
}
document.getElementById('mid_treecontextpopup').setAttribute("collapsed", "false");
if (midRowCounter < 0) {
document.getElementById('mid_treecontextpopup').setAttribute("collapsed", "true");
}
},
getTreeRow : function (event) {
midRowCounter = -1; // global
var row = {}, col = {}, child = {};
var target;
if (event.detail == 2) {
target = event.originalTarget;
} else {
target = document.popupNode;
}
if (target.localName == "treechildren")
{
var tree = document.getElementById("mid_wordstree");
tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, child);
midRowCounter = row.value;
}
return midRowCounter;
},
wordsTreeLookup : function (event) {
var word = document.getElementsByTagName("treecell").item(midRowCounter * 2);
domHelper.inputElement.value = word.getAttribute("label");
mid_mud.saveInHistory = false;
mid_mud.lookup.lookupWord();
mid_mud.saveInHistory = true;
},
fillDefinition : function (event) {
// midRowCounter is known from popupshowing
var def = document.getElementsByTagName("treecell").item(midRowCounter * 2 + 1);
var defstrbundle = document.getElementById("tree.definition");
var definition = defstrbundle.getString("tree.definition");
def.setAttribute("label", prompt(definition, def.getAttribute("label")));
},
removeRow : function (event) {
var parent, cell, tree ;
tree = document.getElementById("mid_wordstree");
cell = document.getElementsByTagName("treecell").item(midRowCounter * 2 + 1);
cell.parentNode.removeChild(cell);
cell = document.getElementsByTagName("treecell").item(midRowCounter * 2);
cell = document.getElementsByTagName("treerow").item(midRowCounter);
parent = cell.parentNode;
parent.removeChild(cell);
parent.parentNode.removeChild(parent);
mid_mud.updateStatusBarCounter();
},
saveWordToTree : function (myWord, myDef) {
var wordsTreeChildren = document.getElementById("mid_wordstreechildren");
var wordsTree = document.getElementById("mid_wordstree");
var wordsTreeRow = wordsTree.view.rowCount;
var newTreeItem = document.createElement("treeitem");
var newTreeRow = document.createElement("treerow");
var newWord = document.createElement("treecell");
var newDef = document.createElement("treecell");
newWord.setAttribute("label", myWord);
newWord.setAttribute("editable", "false");
newTreeRow.appendChild(newWord);
newDef.setAttribute("label", myDef);
newTreeRow.appendChild(newDef);
newTreeItem.appendChild(newTreeRow);
wordsTreeChildren.appendChild(newTreeItem);
wordsTree.treeBoxObject.ensureRowIsVisible(wordsTreeRow);
mid_mud.updateStatusBarCounter();
},
getWord : function (event) {
var tree = document.getElementById("mid_wordstree");
var tbo = tree.treeBoxObject;
var row = {}, col = {}, child = {};
tbo.getCellAt(event.clientX, event.clientY, row, col, child);
if (col.value.id != "mid_words") {
return null; // editing definition
}
return document.getElementsByTagName("treecell").item(this.getTreeRow(event) * 2);
},
getLastWord : function () {
var lastWord = "";
var tree = document.getElementById("mid_wordstree");
var rowCounter = tree.view.rowCount;
if (rowCounter > 0) {
var col = tree.columns ? tree.columns.mid_words : "mid_words";
try {
lastWord = tree.view.getCellText(rowCounter - 1, col);
} catch (e) {
alert( "getLastWord: " + e.name + "-" + e.message);
}
}
return lastWord;
},
removeAllRows : function (event) {
var treeChildren = document.getElementById("mid_wordstreechildren");
while (treeChildren.hasChildNodes()) {
treeChildren.removeChild(treeChildren.firstChild);
}
mid_mud.updateStatusBarCounter();
},
getRowCount : function () {
return document.getElementById("mid_wordstree").view.rowCount;
},
saveWordsToFile : function () {
var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance(Ci.nsIScriptableUnicodeConverter);
conv.charset = "UTF-8";
var nsIFilePicker = Ci.nsIFilePicker;
var file = null, fileStream = null;
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.init(window, mid_mud.util.getLocaleString("choose.file"), nsIFilePicker.modeSave);
fp.appendFilters(nsIFilePicker.filterAll);
if (fp.show() == nsIFilePicker.returnCancel) {
return false;
}
file = fp.file;
fileStream = Cc["@mozilla.org/network/file-output-stream;1"].
createInstance(Ci.nsIFileOutputStream);
try {
fileStream.init(file, 0x04 | 0x08 | 0x20, 420, 0);
} catch (e) {
if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
mid_mud.util.localAlert("file.access.denied", "");
}
else {
alert("i/o error: " + e.name + "-" + e.message);
}
}
var i, cell_1, cell_2, word, def;
var tree = document.getElementById("mid_wordstree");
for (i = 0; (cell_1 = tree.getElementsByTagName("treecell").item(i)); i = i + 2) {
word = cell_1.getAttribute("label");
cell_2 = document.getElementsByTagName("treecell").item(i + 1);
def = cell_2.getAttribute("label");
data = conv.ConvertFromUnicode(word + ";" + def + "\n");
fileStream.write(data, data.length);
}
fileStream.close();
mid_mud.util.localAlert("file.saved", "");
},
readWordsFromFile : function () {
var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance(Ci.nsIScriptableUnicodeConverter);
conv.charset = "UTF-8";
var nsIFilePicker = Ci.nsIFilePicker;
var file = null, sorstr = "", sor = [];
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.init(window, mid_mud.util.getLocaleString("choose.file"), nsIFilePicker.modOpen);
fp.appendFilters(nsIFilePicker.filterAll);
if (fp.show() == nsIFilePicker.returnCancel) {
return false;
}
file = fp.file;
var istream = Cc["@mozilla.org/network/file-input-stream;1"]
.createInstance(Ci.nsIFileInputStream);
try {
istream.init(file, 0x01, 444, 0);
} catch (e) {
if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
mid_mud.util.localAlert("file.access.denied", "");
}
else {
alert("i/o error: " + e.name + "-" + e.message);
}
}
istream.QueryInterface(Ci.nsILineInputStream);
/* read lines into array */
var line = {}, lines = [], hasmore;
do {
hasmore = istream.readLine(line);
sorstr = conv.ConvertToUnicode(line.value);
sor[0] = "";
sor[1] = "";
sor = sorstr.split(";");
this.saveWordToTree(sor[0], sor[1]);
lines.push(line.value);
} while (hasmore);
istream.close();
}
};
mid_mud.util = {
prompts : Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService),
confirm : function (what) {
return this.prompts.confirm(window, "mid", what);
},
stripAccents : function (str) {
var s = str, i;
var rExps = [ /[\xC0-\xC2]/g, /[\xE0-\xE2]/g,
/[\xC8-\xCA]/g, /[\xE8-\xEB]/g,
/[\xCC-\xCE]/g, /[\xEC-\xEE]/g,
/[\xD2-\xD4]/g, /[\xF2-\xF4]/g,
/[\xD9-\xDB]/g, /[\xF9-\xFB]/g,
/[\xC7]/g, /[\xE7]/g];
var repChar = ['A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', 'C', 'c'];
for (i = 0; i < rExps.length; i++) {
s = s.replace(rExps[i], repChar[i]);
}
return s;
},
toUniNumber : function (s) {
var c, m, o = "", i = s;
for (m = 0; i.charAt(m); ++m) {
if (((c = i.charCodeAt(m)) < 128 && c != 38) ||
(c >= 160 && c <= 255 &&
c != 166 &&
c != 173 && c != 178 && c != 179 &&
c != 185 && c != 188 && c != 189 &&
c != 190 &&
c != 208 &&
c != 215 &&
c != 221 && c != 222 &&
c != 240 &&
c != 253 && c != 254)) {
o = o + i.charAt(m);
} else {
if (c == 38) {
o = o + "&";
}
else {
o = o + "" + c + ";";
}
}
}
return escape(o);
},
populateWithAttributes : function (domObj) {
var len = arguments.length;
while (len > 2) {
domObj.setAttribute(arguments[len - 2], arguments[len - 1]);
len = len - 2;
}
},
inArray : function (arr, val) {
var i;
if (!arr) {
return false;
}
for (i = 0; i < arr.length; i++) {
if (arr[i] === val) {
return true;
}
}
return false;
},
browserWrapper: function (a) {
var browserName = "";
try {
var appInfo = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
} catch (e) {}
if (appInfo) {
browserName = appInfo.name;
}
switch (browserName) {
case "Iceweasel":
a.Iceweasel();
break;
case "Firefox":
a.Firefox();
break;
case "Browser": // Flock now
a.Flock();
break;
case "Flock": // Flock later?
a.Flock();
break;
case "Netscape":
a.Netscape();
break;
case "SeaMonkey":
a.SeaMonkey();
break;
case "mid": // Xulrunner mid
a.mid();
break;
default:
alert("Sorry, unknown or old browser");
}
},
dumpToConsole: function (aMessage) {
var consoleService = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
consoleService.logStringMessage("mid_ " + aMessage);
},
getLocaleString : function (lsName) {
var myprop =
Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService);
var mystrings = myprop.createBundle("chrome://mid/locale/mid.properties");
return mystrings.GetStringFromName(lsName);
},
localAlert : function (p,q) {
var msbd = document.getElementById(p);
var ls = msbd.getString(p);
this.prompts.alert(window, "mid", ls + q);
},
copyText : function () {
const gClipboardHelper =
Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
gClipboardHelper.copyString(mid_mud.lookup.getSelectionForLookup());
}
};